package main

import "fmt"

type dog struct {
	name string
}

// 构造函数
func newDog(name string) dog {
	return dog{
		name: name,
	}
}

// 方法是作用于特定类型的函数
// 接收者是调用该方法的具体类型变量, 一般变量名是类型首字母小写来定义
func (d dog) wang() {
	fmt.Printf("%s: 汪汪汪~\n", d.name)
}
func (d dog) xi() {
	fmt.Printf("%s: xixixi~\n", d.name)
}

type person struct {
	age int
}

func newPerson(age int) person {
	return person{
		age: age,
	}
}
func (p person) guonian() {
	p.age++
}
// 想要修改属性值,要用指针作为参数接收
func (p *person) guozhennian() {
	p.age++
}
func main() {
	d1 := newDog("二狗")
	d1.wang()
	d1.xi()

	p1 := newPerson(1)
	p1.guonian()
	fmt.Println(p1.age) // 1
	p1.guozhennian()
	fmt.Println(p1.age) // 2
}
